import CryptoJS from "crypto-js"; // 引入 crypto-js
console.log("crypto:", CryptoJS);

// function WXBizDataCrypt(appId, sessionKey) {
//   this.appId = appId;
//   this.sessionKey = sessionKey;
// }

// WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
//   // base64 decode
//   const sessionKey = Buffer.from(this.sessionKey, "base64");
//   const encryptedDataBuf = Buffer.from(encryptedData, "base64");
//   const ivBuf = Buffer.from(iv, "base64");

//   try {
//     // 解密
//     const decipher = crypto.createDecipheriv("aes-128-cbc", sessionKey, ivBuf);
//     // 设置自动 padding 为 true，删除填充补位
//     decipher.setAutoPadding(true);
//     let decoded = decipher.update(encryptedDataBuf, "binary", "utf8");
//     decoded += decipher.final("utf8");

//     decoded = JSON.parse(decoded);
//   } catch (err) {
//     throw new Error("Illegal Buffer");
//   }

//   if (decoded.watermark.appid !== this.appId) {
//     throw new Error("Illegal appId");
//   }

//   return decoded;
// };
// export default WXBizDataCrypt;

// // module.exports = WXBizDataCrypt;

export function decryptPhoneNumber(encryptedData, iv, sessionKey) {
  //  !!! 严重安全问题：在前端进行解密极其不安全 !!!
  //  !!!  这只是演示，实际情况应该将 encryptedData、iv、sessionKey 发送到后端解密 !!!

  // 1. 将 Base64 编码的 sessionKey、encryptedData 和 iv 转换为 CryptoJS 的 WordArray 对象
  const key = CryptoJS.enc.Base64.parse(sessionKey);
  const iv_parsed = CryptoJS.enc.Base64.parse(iv);
  const encryptedData_parsed = CryptoJS.enc.Base64.parse(encryptedData);

  // 2. 配置解密参数
  const options = {
    iv: iv_parsed,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  };

  // 3. 执行 AES 解密
  const decrypted = CryptoJS.AES.decrypt(
    { ciphertext: encryptedData_parsed },
    key,
    options
  );

  // 4. 将解密后的数据转换为 UTF-8 字符串
  let decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);

  if (!decryptedStr) {
    throw new Error("解密失败：解密后数据为空");
  }

  // 5. 将 JSON 字符串解析为 JavaScript 对象
  let decryptedData;
  try {
    decryptedData = JSON.parse(decryptedStr);
  } catch (parseError) {
    console.error("JSON 解析错误:", parseError);
    throw new Error("解密失败：JSON 解析错误");
  }

  if (decryptedData && decryptedData.phoneNumber) {
    return decryptedData.phoneNumber;
  } else {
    throw new Error("解密失败：phoneNumber 不存在");
  }
}

const CC = 1;
export default CC;
